package cn.net.Collection;
/*
      ArrayList集合：普通方法+四种遍历迭代方式
 */
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Iterator;
import java.util.ListIterator;

/*
  测试ArrayList集合。属于实现接口类。可以创建对象并实例化
 */
public class TestArrayList {
    public static void main(String[] args) {
        //1.创建ArrayList对象,使用的是无参构造
        //底层会自动帮我们创建数组存放对象,并且数据的初始容量是10

        ArrayList<Integer> list =new ArrayList<Integer>();//纯子类
        list.add(10);
        list.add(20);
        list.add(30);
        list.add(40);
        list.add(0,50);//指定小标位置添加元素
        System.out.println(list);//[50, 10, 20, 30, 40];下标值范围：0~4
        //list.clear();
        //System.out.println(list);//[]

        System.out.println(list.contains(30));//true
        System.out.println(list.get(0));//50
        System.out.println(list.isEmpty());//false

        System.out.println(list.indexOf(1));//-1  集合没有1这个元素，所以打印-1
        System.out.println(list.lastIndexOf(4));//-1
        System.out.println(list.indexOf(50));//测试集合中50这个元素第一次出现的下标值：0
        System.out.println(list.lastIndexOf(40));//40对应的下标值：4

        System.out.println(list.remove(0));//下标0对应的元素为50;删除指定位置小标的元素
        System.out.println(list);//[10, 20, 30, 40]
        /*数据类型转换:装箱Integer.valueOf(元素值)*/
        System.out.println(list.remove(Integer.valueOf(10)));//true;删除集合中指定的一个元素10
        System.out.println(list);//[20, 30, 40]

        System.out.println(list.set(0,77));//在集合中指定位置并重置元素
        System.out.println(list);//[77, 30, 40]

        System.out.println(list.size());//元素个数为3
        System.out.println(Arrays.toString(list.toArray()));//存入数组，打印数组值[77, 30, 40]

        System.out.println("------------------- //4种迭代方式-----------------------------");
       //方式1:for循环
        System.out.println("方式1");
        //开始:0   结束:最大下标(集合长度-1)  变化:++
        for (int i = 0; i < list.size(); i++) {
            System.out.println(list.get(i));//根据下标获取对应下标位置上的元素
        }
        //方式2:增强for循环
        System.out.println("方式2");
        for (Integer i : list) {//遍历list集合,每次循环得到的元素是Integer类型的i
            System.out.println(i);//打印每次循环到的集合元素
        }
        //方式3:Iterator
        /**1.获取迭代器  2.判断是否还有元素(一般用来做循环条件)  3.获取当前遍历到的元素*/
        System.out.println("方式3");
        Iterator<Integer> it = list.iterator();//获取集合用来迭代的迭代器,此迭代器是继承自Collection接口中的
        while(it.hasNext()) {//通过迭代器来判断集合中是否还有元素,如果有,继续迭代,如果没有,结束循环
            Integer num = it.next();//获取当前遍历到的集合元素
            System.out.println(num);//打印当前遍历到的集合元素
        }
        //方式4:ListIterator
        System.out.println("方式4");
        ListIterator<Integer> it2 = list.listIterator();//获取集合用来迭代的迭代器,此迭代器是List接口中的迭代器
        while(it2.hasNext()) {//通过迭代器来判断集合中是否还有元素,如果有继续迭代,如果没有,结束循环
            Integer s2 = it2.next();//获取当前遍历到的集合元素
            System.out.println(s2);//打印当前遍历到的集合元素
        }
    }
}
